import ora from 'ora';
import SFTPClient from '../sftp/sftpClient.js';

/**
 * 自动管理 SFTP 连接生命周期的高阶函数
 * @param {Object} config - SFTP 配置
 * @param {Function} operation - 要执行的操作函数，接收 sftpClient 作为参数
 * @returns {Promise<any>} 操作结果
 */
export async function withSftpConnection(config, operation) {
  const sftpClient = new SFTPClient();
  let spinner = null;
  
  try {
    spinner = ora('连接中...').start();
    await sftpClient.connect(config);
    spinner.succeed('连接成功');
    
    return await operation(sftpClient);
  } catch (error) {
    if (spinner && spinner.isSpinning) {
      spinner.fail('操作失败');
    }
    throw error;
  } finally {
    await sftpClient.disconnect().catch(() => {});
  }
}
